﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// ShaderToy风格的基础绘制脚本
/// 此脚本演示了如何在Unity中实现类似ShaderToy的屏幕特效
/// 主要用于管理和控制屏幕后处理着色器
/// </summary>
public class sc_draw_basic : MonoBehaviour
{
    /// <summary>
    /// 后处理材质
    /// 用于应用ShaderToy风格的屏幕特效
    /// </summary>
    private Material postProcessMaterial;

    /// <summary>
    /// Unity生命周期函数：在脚本实例被加载时调用
    /// 用于初始化后处理材质和相关组件
    /// </summary>
    void Start()
    {
        // 创建使用SimpleCircle着色器的材质
        Shader shader = Shader.Find("ShaderToy/SimpleCircle");
        if (shader != null)
        {
            postProcessMaterial = new Material(shader);
        }
        else
        {
            Debug.LogError("找不到SimpleCircle着色器！");
        }
    }

    /// <summary>
    /// Unity生命周期函数：在相机渲染完成后调用
    /// 用于应用屏幕后处理效果
    /// </summary>
    void OnRenderImage(RenderTexture source, RenderTexture destination)
    {
        if (postProcessMaterial != null)
        {
            // 使用材质进行后处理，将源纹理处理后输出到目标纹理
            Graphics.Blit(source, destination, postProcessMaterial);
        }
        else
        {
            // 如果材质不可用，直接复制源纹理到目标纹理
            Graphics.Blit(source, destination);
        }
    }

    /// <summary>
    /// Unity生命周期函数：每帧调用一次
    /// 用于更新着色器参数和处理输入
    /// </summary>
    void Update()
    {
        if (postProcessMaterial != null)
        {
            // 这里可以添加更新着色器参数的代码
            // 例如：更新时间、鼠标位置等
            // postProcessMaterial.SetFloat("_Time", Time.time);
        }
    }

    /// <summary>
    /// Unity生命周期函数：当对象被销毁时调用
    /// 用于清理资源
    /// </summary>
    void OnDestroy()
    {
        // 清理材质资源
        if (postProcessMaterial != null)
        {
            Destroy(postProcessMaterial);
        }
    }
}
